package com.xxx.common.core.sampleframe;

import com.xxx.common.core.sampleframe.entity.PropertyDescriptorInfo;
import org.springframework.beans.BeanUtils;

import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by lowkey on 16/9/27.
 */
public class PropertyDescriptorUtils {



    private static Map<Class,PropertyDescriptorInfo> cache = new HashMap<Class, PropertyDescriptorInfo>();

    public static Map<String,PropertyDescriptor> getPDMaps(Class clazz){
        if(cache.containsKey(clazz)){
            return cache.get(clazz).getPdMap();
        }
        return update(clazz);
    }

    public static synchronized Map<String,PropertyDescriptor> update(Class clazz){
        if(cache.containsKey(clazz)){
            return cache.get(clazz).getPdMap();
        }
        PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(clazz);
        final Map<String, PropertyDescriptor > fieldPDMap = new HashMap<String, PropertyDescriptor >();
        for (PropertyDescriptor pd : pds) {
            if("class".equals(pd.getName())){
                continue;
            }
            fieldPDMap.put(pd.getName(), pd);
        }
        PropertyDescriptorInfo propertyDescriptorInfo = new PropertyDescriptorInfo();
        propertyDescriptorInfo.setPdMap(fieldPDMap);
        cache.put(clazz,propertyDescriptorInfo);
        return getPDMaps(clazz);
    }

}
